package com.sc.nft.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.TradingPoolConfig;
import com.sc.nft.entity.UserInfo;
import com.sc.nft.entity.dto.*;
import com.sc.nft.entity.vo.*;
import com.sc.nft.entity.vo.tradingPool.*;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author PC
 * @description 针对表【sc_trading_pool_config(生态池配置)】的数据库操作Service
 * @createDate 2024-10-26 13:55:44
 */
public interface TradingPoolConfigService {

    /**
     * 获取简单的交易池配置
     *
     * @param id daoId
     * @return
     */
    TradingPoolEasyConfigVO getTradingPoolEasyConfig(Long id);

    /**
     * 获取交易池详情
     *
     * @param id
     * @return
     */
    TradingPoolDetailsVO getTradingPoolDetails(Long id);

    /**
     * 计算价格范围
     *
     * @param tradingPoolCalculatePriceRatioRangeDTO
     * @return
     */
    TradingPoolCalculatePriceRatioRangeVO calculatePriceRatioRange(TradingPoolCalculatePriceRatioRangeDTO tradingPoolCalculatePriceRatioRangeDTO);

    /**
     * 创建交易池
     *
     * @param request
     * @return
     */
    Boolean createConf(TradingPoolCreateConfRpcDTO request);

    /**
     * 修改交易池
     *
     * @param request
     * @param isAdmin
     * @return
     */
    Boolean updateConf(TradingPoolUpdateConfDTO request, Boolean isAdmin);

    /**
     * 交易池详情
     *
     * @param id
     * @return
     */
    TradingPoolPurchaseDetailsVO tradingPoolPurchaseDetails(Long id);

    /**
     * 交易池详情
     *
     * @param id
     * @return
     */
    TradingPoolVO confDetail(Long id);

    /**
     * 分页查询
     *
     * @param page
     * @param daoId
     * @return
     */
    IPage<TradingPoolVO> confPage(Page page, Long daoId);

    /**
     * 更新销毁配置
     *
     * @param request
     * @return
     */
    Boolean updateDestructionConf(TradingPoolDestructionConfDTO request);

    /**
     * 获取销毁配置详情
     *
     * @param id
     * @return
     */
    TradingPoolDestructionConfVO destructionConfDetail(Long id);

    /**
     * 交易池开关
     *
     * @param id
     * @param status
     * @return
     */
    Boolean updateConfStatus(Long id, Boolean status);

    /**
     * 删除交易池
     *
     * @param id
     * @return
     */
    Boolean deleteConf(Long id);

    /**
     * 加减库存
     *
     * @param request
     * @return
     */
    Boolean confAdjustStock(TradingPoolConfAdjustStockDTO request);

    /**
     * 设置分润模版
     *
     * @param request
     * @return
     */
    Boolean confShareProfitPanel(TradingPoolConfShareProfitPanelDTO request);

    /**
     * 获取分润模版
     *
     * @param id id
     * @return TradingPoolSharePanelVO
     */
    TradingPoolSharePanelVO getShareProfitPanel(Long id);

    /**
     * 加减资金
     *
     * @param request
     * @return
     */
    Boolean confAdjustAmount(TradingPoolConfAdjustAmountDTO request);

    /**
     * 获取交易池藏品
     *
     * @param request
     * @return
     */
    List<TradingPoolCollectionVO> getCollectionList(TradingPoolCollectionDTO request);

    /**
     * 根据品牌id获取市值账号
     *
     * @param daoId
     * @return
     */
    List<TradingPoolMarketAccountVO> marketAccount(Long daoId);


    /**
     * 交易池记录
     *
     * @param request
     * @return
     */
    IPage<TradingPoolChangeLogVO> changeLogPage(TradingPoolChangeLogDTO request);

    /**
     * 心脏交易池账户
     */
    void addGiftIncomeAccount(Long id, BigDecimal amount);


    /**
     * 交易池卖出详情
     *
     * @param id
     * @param userInfo
     * @return
     */
    TradingPoolSellDetailsVO tradingPoolSellDetails(Long id, UserInfo userInfo);

    /**
     * 查询可用数量
     *
     * @param request
     * @return
     */
    TradingPoolQueryUsableVO queryUsable(TradingPoolQueryUsableDTO request);

    /**
     * 礼包收入账户冻结账户统计
     *
     * @param request
     * @return
     */
    IPage<TradingPoolAccountRecordVO> accountRecordPage(TradingPoolAccountRecordDTO request);

    /**
     * 账户信息
     *
     * @param request
     * @return
     */
    TradingPoolAccountInfoVO accountInfo(TradingPoolAccountInfoDTO request);


    /**
     * 获取激活的交易池配置列表
     *
     * @return
     */
    List<TradingPoolConfig> getActivatedTradingPoolConfigList();


    /**
     * 销毁交易池
     *
     * @param tradingPoolConfig
     */
    void destroyTradingPool(TradingPoolConfig tradingPoolConfig);

    /**
     * 交易数据初始化
     */
    void initTradingPool();

    /**
     * 是否可支付
     * @param dto
     * @return
     */
    CurrentPriceVO whetherItCanBePaid(WhetherItCanBePaidDTO dto);
}
